package front_qianzhi;

public class Main1 {
    public static void fun1(Animal a){

    }
    public static Animal fun2(){
        Dog dog=new Dog("小黑",3);
        return dog;
    }
    public static void main(String[] args) {
        //1.向上转型->父类引用 引用了子类对象

        //1.(1)直接赋值
        Animal animal=new Dog("旺财",1);

        //1.(2)作为方法的参数进行传递
        Dog d=new Dog("小黄",2);
        fun1(d);

        //1.(3)作为返回类型进行传递
        Animal animal1=fun2();

        //向上转型的缺点->只能通过父类引用 来调用父类自己特有的成员变量/方法
        //即进行向上转型后只能调用父类中的成员，不能使用子类的成员
        animal.eat();
        //animal.bark();
    }
}

class Animal{
    public String name;
    int age;

    public Animal() {
    }

    public Animal(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public void eat(){
        System.out.println(name + " 正在吃...");
    }

}

class Dog extends Animal {
    public Dog() {
    }

    public Dog(String name,int age){
        super(name,age);
    }

    public void bark(){
        System.out.println(name + " 正在叫...");
    }

}
